package com.xinyue.design.singleton;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 实现方式2：static特性使用
 * static变量在类装载的时候进行初始化。多个实例的static变量会共享同一块内存区域。
 * 这就意味着，在Java中，static变量只会被初始化一次，就是在类装载的时候，而且多个实例都会共享这个内存空间，这就是单例模式要实现的功能。真是得来全不费功夫
 */
public class Singleton2 {

	//定义一个变量来存储创建好的类实例
	private static Singleton2 singleton = new Singleton2();
	
	private String name;
	private String password;
	private String gorup;
	
	public String getName() {
		return name;
	}
	public String getPassword() {
		return password;
	}
	public String getGorup() {
		return gorup;
	}
	
	//私有化构造方法：在内部控制创建实例的数目。也就是在外部不能随随便便就可以创建类实例，否则就无法控制创建的实例个数了。
	private Singleton2() {
		//初始化类属性
		readConfig();
	}
	
	//这个方法里面就不需要控制代码了，直接使用已经创建好的实例
	public static synchronized Singleton2 getInstance() {
		return singleton;
	}
	
	private void readConfig() {
		Properties proper = new Properties();
        InputStream is = null;
        try {
        	is = Singleton2.class.getResourceAsStream("testConfig.properties");
        	proper.load(is);
	        //把配置文件中的内容读出来设置到属性上
	        this.name = proper.getProperty("name");  
	        this.password = proper.getProperty("password"); 
	        this.gorup = proper.getProperty("gorup"); 
        }catch(Exception e) {
        	System.out.println(e.getMessage());
        }finally{
        	try {
				is.close();
			} catch (IOException e) {
				System.out.println(e.getMessage());
			}
        }
	}
}
